Skip to content

feat(spec)!: EnvironmentArtifact 信封收敛为单一声明 —— C10 双源清账,./system 持活 wire 形,./cloud re-export (#4740) - #4767

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-4740-environment-artifact-dual-source
Aug 3, 2026
Merged

feat(spec)!: EnvironmentArtifact 信封收敛为单一声明 —— C10 双源清账,./system 持活 wire 形,./cloud re-export (#4740)#4767
os-zhuang merged 3 commits into
mainfrom
claude/issue-4740-environment-artifact-dual-source

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Fixes #4740(#4535 C10,第二批)。维护者裁决路线 A′:./system 收敛为单一声明、取活的 wire 形状,./cloud re-export 同一声明;从未实现的 functions / manifest / payloadRefspec-property-retirement 退役。基线 6 → 3。

真源判定(import 语句级,三仓复核)

扫描基线:objectstack 本分支(base 832047c57,含 C13+C15)/ cloud @ 5df2c69(= origin/main)/ objectui @ 785b8a5d(= origin/main)。

EnvironmentArtifact* / Sha256Digest* 命中 结论
objectstack packages/metadata/src/plugin.ts(runtime parse,@objectstack/spec/cloud)+ spec 自身两侧源文件与测试 唯一 runtime 消费者,parse 的就是 wire 形
cloud objectos-runtime/src/artifact-api-client.ts:25service-cloud/src/registry-reader.ts:26(均 type-only import 自 @objectstack/spec/cloud);其余命中为其本地 EnvironmentArtifactResponse(extends spec 类型)与注释 type-only,名字与形状均不变 ⇒ 零迁移
objectui 零命中 不受影响

cloud 侧手拷形状复查:file-artifact-api-client.tsas EnvironmentArtifactResponse 铸型与 routes/cloud.ts 的组装代码都引用 spec 类型(非重复声明),其注释「EnvironmentArtifactSchema requires a 64-char hex string」与收敛后形状一致 —— 本簇未发现新的手拷双源

system 侧「v0」家族(checksum 对象、分类袋 metadata、内联 functions[]、必填 manifestpayloadRef)三仓零代码消费者、从未有 producer 产出(CLI compile 写裸 definition,函数走独立 runtimeModule;控制面 cloud-artifact-helpers.ts 一直写 hex 字符串 checksum)。两侧互相解析不过(checksum 类型硬冲突)⇒ 收敛必须先裁形状,裁决即「实况 wire 形」。

实施

  • system/environment-artifact.zod.ts 重写为活 wire 形(lazySchema 同 cloud 旧声明;Sha256Digest(Schema) 随声明搬入,./cloud 仍导出);cloud/environment-artifact.zod.ts 改为纯 re-export + 指路注释。
  • v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个 system/EnvironmentArtifact* def 停止发布。真退役,未进 RENAMED_DEFS(该表不变式:没有 key 离开契约;本簇 key 确实离开)。
  • packages/metadata/src/plugin.ts 一字未动:收敛目标就是它已在解析的形状(实测 14 文件 290 测试全绿)。
  • north-star.mdx §6.3 锚点同步:单一声明 + ./cloud re-export;字段清单改为 wire 形(checksum 为 SHA-256 hex 字符串、metadata 为编译产物本体、可选 builtAt/builtWith)。
  • docs-import-surface.baseline.json 删 2 行 stale(两个 enum 的 no-type-export 例外,门禁点名)。

退役三键:tombstone + conversion 评估(#4734 先例,不许沉默跳过)

functions / manifest / payloadRefretiredKey() tombstone:作者写入在 tsc 处得 never、在 parse 处得 prescription(含 FROM→TO 与一行修复),不是静默剥离。

判定:无需 ADR-0087 D2/D3 conversion。 #4734(objectEnableTrashMruRemoved)需要 conversion 是因为存量 16.x sys_metadata 行可能携带 enable.trash/mru;本簇不同:信封是传输形状 —— ① 不作为 sys_metadata 行落库(runtime 每次 boot 从 artifact 源重新 parse);② conversion walker 只走 stack 树(mapCollection(stack, ...)),信封不在树上,fixture 写不出能跑到的(converge-activation-event-schema changeset 同款论证);③ 三键从未有 producer 产出,at-rest artifact 文件(cloud R2 / file source)全部是 wire 形。tombstone prescription 即迁移文档。gate (b) 对此的实跑印证:def 不再发出 ⇒ 46 行走 #4650 路径 3 自证(见下),spec-changes.json / upgrade-guide 零变化(check:spec-changes / check:upgrade-guide PASS)。

⚠️ wire 形状警示(#4666 盲区)

checksum 对象→字符串、metadata 分类袋→受校验的 ObjectStackDefinition,都是 key 级门禁不可见的类型变更(key 两侧同名同在)。changeset 显式承载;parse pin 钉住:旧 { algorithm, value } 对象形 → ,64 位 hex 字符串 → 。对 ./cloud importer 零变化;对 ./system importer 是类型变更(实测三仓零 importer)。

#4650 删行自证(门禁实跑,merge-base 锚定 832047c57)

ℹ️  7 baseline deletion(s) since 832047c57039 carry their own proof (#4650):
     - system/EnvironmentArtifact:* (10 line(s)) — def no longer emitted by this build; …
     - system/EnvironmentArtifactChecksum:* (2 line(s)) — def no longer emitted by this build; …
     - system/EnvironmentArtifactFunction:* (5 line(s)) — def no longer emitted by this build; …
     - system/EnvironmentArtifactManifest:* (3 line(s)) — def no longer emitted by this build; …
     - system/EnvironmentArtifactMetadata:* (21 line(s)) — def no longer emitted by this build; …
     - system/EnvironmentArtifactPayloadRef:* (3 line(s)) — def no longer emitted by this build; …
     - system/EnvironmentArtifactRequirement:* (2 line(s)) — def no longer emitted by this build; …

(46 行全部经路径 3「整 def 不再发出→归 manifest ratchet 管辖」;json-schema.manifest.json 同步删 9 键 + 新增 system/Sha256Digest,#2978 蓄意移除通道。)

check:dual-source-exports 实跑:

✅  self-test: flags same-name different-declaration exports, and nothing else.
✅  no new dual-source exports: 4288 names across 16 entry points — 173 re-exported (single declaration), 3 accepted dual-source (baseline).

符号身份 pin + sabotage(C6 #4745 / C16 #4752 手法)

pin(src/system/environment-artifact.test.ts):TypeScript compiler API,从 package.json exports map 枚举全部 16 入口(防新入口逃逸)+ 防空转守卫(module symbol 必解析、./system 表面 >100 导出);三名字全入口唯一解析到 src/system/environment-artifact.zod.ts,./cloud 必须是同符号 re-export,v0 家族 16 名在任何入口出现即红;runtime 命名空间同一性(cloud.EnvironmentArtifactSchema === system.EnvironmentArtifactSchema,同一 binding)。

  • S1(重加被删名):system 侧临时重加 EnvironmentArtifactManifestSchema 新声明 ⇒ 2 测试红:AssertionError: ./system must not name EnvironmentArtifactManifestSchema(compiler pin + runtime namespace pin 双拦)。
  • S2(禁止路线:cloud 侧新声明取代 re-export):cloud 侧临时改为自有 z.object 声明 ⇒ 2 测试红:AssertionError: ./cloud must resolve `EnvironmentArtifact` to the ./system declaration: expected 'src/cloud/environment-artifact.zod.ts…' to be 'src/system/environment-artifact.zod.t…'
  • 恢复后 14/14 全绿。

验证清单(全部实跑,exit code 显式捕获)

检查 结果
check:dual-source-exports(3 行删除自证) ✅ PASS(输出见上)
check:generated(8 生成物:spec-changes / upgrade-guide / skill-docs / skill-refs / react-blocks / authorable-surface / api-surface / docs) ✅ 全 PASS
check:strictness-ledger(system 侧 .passthrough() 删除后实跑) ✅ PASS,台账零变化(该文件不在辖区,不反射式改)
check:variant-docs / check:liveness / check:empty-state / check:skill-examples / check:exported-any ✅ 全 PASS
pnpm build --filter @objectstack/spec ✅ exit 0
spec 测试(vitest --maxWorkers=2) ✅ 292 文件 / 7354 测试全过
@objectstack/metadata 测试(runtime 消费者) ✅ 14 文件 / 290 测试全过
全仓 typecheck(turbo --concurrency=2) ✅ 122/122 successful
pnpm --filter @objectstack/docs build(Build Docs 修复后) ✅ exit 0;check:docs 248 文件同步

定级(据实,§5)

major:./system 16 个已发布导出名移除(TS2305 同形于 C14/C16,实测三仓 import 级零命中)。零元数据迁移:被删 def 均不从 BUILTIN_METADATA_TYPE_SCHEMAS 可达(门禁真图实跑,上方 7 组自证);runtime 行为零变化。changeset:.changeset/environment-artifact-dual-source-c10.md

顺带发现(不在本 PR 修)

分区与入队

只动 ./system + ./cloud 入口相关文件 + 生成物 + 文档(packages/metadata 零改动);未触 api/automation/integration/ui/studio 区。base 832047c57(含 C13+C15 #4760);按串行入队协议,入队前 rebase+重生成由 PM 另行指令。

@vercel

vercel Bot commented Aug 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 3, 2026 5:19am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:system tests tooling labels Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

107 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

claude added 2 commits August 3, 2026 04:48
…re 形,./cloud re-export (#4740)

`EnvironmentArtifact(Input|Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个
声明:cloud 侧是活的 wire 形(checksum 为 64 位 hex 字符串、metadata =
ObjectStackDefinitionSchema),全仓唯一 runtime Zod parse
(packages/metadata/src/plugin.ts `_parseAndRegisterArtifact`)与 cloud 仓
3 处 type import 都用它;system 侧是文档化「v0」(checksum 对象、分类袋
metadata、内联 functions[]、必填 manifest、payloadRef 保留位),三仓
(objectstack / cloud / objectui)import 级实测零代码消费者、从未有 producer
产出过。两侧互相解析不过。按维护者裁决(#4740,路线 A′)收敛:

- system/environment-artifact.zod.ts 重写为活 wire 形(唯一声明);
  Sha256Digest(Schema) 随声明搬入 ./system(./cloud 仍导出)
- cloud/environment-artifact.zod.ts 改为纯 re-export(同一符号,两个入口)
- 从未实现的 functions / manifest / payloadRef 走 retiredKey() tombstone
  退役(ADR-0049):tsc 处 never、parse 处 prescription;无 ADR-0087
  conversion —— 信封是传输形状,不落 sys_metadata、不在 conversion walker
  的 stack 树上,存量行不可能携带(#4734 先例逐条评估,论证见 PR)
- v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个
  system/EnvironmentArtifact* def 停止发布(json-schema.manifest.json
  #2978 蓄意删键;authorable-surface 46 行经 #4650 门禁 7 组「def no
  longer emitted」自证删除)
- 符号身份 pin(compiler API,exports-map 枚举 16 入口 + 防空转守卫):
  三名字全入口唯一解析到 src/system/environment-artifact.zod.ts;S1
  (重加被删名)/ S2(cloud 侧新声明的禁止路线)sabotage 均红
- #4666 盲区:checksum 对象→字符串是 key 级门禁不可见的类型变更,parse
  pin 钉住(旧对象形 → 拒;64 位 hex 字符串 → 过),changeset 显式警示
- packages/metadata runtime parse 一字未动(收敛目标即其已解析形状),
  14 文件 290 测试全绿
- north-star.mdx §6.3 锚点同步(单一声明 + re-export;字段清单改为 wire 形)
- 基线 6 → 3(dual-source-exports.baseline.json 删 3 行)
- changeset:@objectstack/spec major(移除 16 个已发布导出名,TS2305),
  零元数据迁移;strictness-ledger 实跑零变化

Fixes #4740

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
build-docs.ts 把 docblock 按行拆成独立段落,`system/environment-artifact.zod.ts`
头注中断行后有一行以 `import ` 开头,MDX/acorn 将其解析为 ESM import 语句,
`content/docs/references/system/environment-artifact.mdx` SyntaxError。改写措辞
(「so the chosen entry point can never change the shape a consumer gets」),
重生成后两个 environment-artifact.mdx 均无行首 `import `/`export `(代码围栏内
的 TypeScript Usage 示例不受影响),`pnpm --filter @objectstack/docs build`
exit 0,`check:docs` 248 文件同步。

生成器坑本体(docblock 行成段 + 行首 import 炸 MDX,#4696 家族)记入 PR 顺带
发现,不在本 PR 修生成器。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
…§7)

os-regen merge driver 对 json-schema.manifest.json / authorable-surface.json /
api-surface.json 不做文本合并,rebase 回退了蓄意手删;本 commit 重放:manifest
删 system/EnvironmentArtifact* 9 键 + system/Sha256Digest 在列,authorable-surface
删 46 行(#4650 门禁以新 merge-base 695cfbd 重新自证,7 组「def no longer
emitted」),api-surface / spec-changes / upgrade-guide / docs 全量重生成。
复验:check:generated 8/8、check:dual-source-exports(基线 6 → 3)、
strictness-ledger / variant-docs / liveness / empty-state 全绿;spec 测试
292 文件 / 7348 全过;全仓 typecheck 122/122;docs 产物无行首 import/export
(Build Docs 措辞修复在 rebase 后仍生效)。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
@os-zhuang
os-zhuang force-pushed the claude/issue-4740-environment-artifact-dual-source branch from b4789ed to 5d13031 Compare August 3, 2026 05:19
@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 05:20
@os-zhuang
os-zhuang enabled auto-merge August 3, 2026 05:20
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 9f601e8 Aug 3, 2026
22 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4740-environment-artifact-dual-source branch August 3, 2026 05:43
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
…dual-source

生成物冲突按 #4535 §7 重新生成,不做文本合并:
- json-schema.manifest.json:合并会静默复活 C10 蓄意删除的 9 个
  system/EnvironmentArtifact* 键(gen:schema 实测报 disappeared),故取 main
  版本后由 gen:schema 重新落我方 RENAMED_DEFS 承接(studio/ActionLocation →
  studio/ActionContributionLocation),delta 对 main 恰 ±1 行
- 两张 shrink-only ratchet(dual-source / docs-import-surface)不归 merge
  driver 管,手工解冲突:取 main 版本后只删本单那一行,diff 对 main 为纯单行删除
- api-surface.json / references 由 gen:api-surface + gen:docs 从合并树重生成
- authorable-surface.json 与 main 逐字节一致(0-key carry 复证)

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…ctstack-ai#4634,ADR-0049) (objectstack-ai#4783)

* feat(spec)!: 退役 DriverCapabilities 31 个零读者能力位 —— 全表活性审计,3 活 31 死 (objectstack-ai#4634)

objectstack-ai#4484 findStream 收尾发现 streaming 位指向已删除的契约方法;按 issue 自述倾向对
DriverCapabilitiesSchema 全部 34 位做两仓活性审计(objectstack + cloud,objectui
零引用确认):仅 queryDateGranularity(engine 聚合分派 + date-bucket parity)、
autonumber(engine 让渡自增生成)、batchSchemaSync(engine 与方法存在性 AND)
三位有决策读者;其余 31 位人人写、无人读,describe 承诺的引擎降级路径从未存在,
且零读者让写错的值(SqlDriver streaming:false 却实现 findStream;InMemoryDriver
streaming:true 却全表物化)三个版本无人发现 —— ADR-0078 假可供性。

- driver.zod.ts:31 位 retiredKey() 墓碑(非 strict schema,裸删会被静默剥离;
  DriverConfigSchema.capabilities 及 SQL/NoSQL 扩展确有 parse 路径),逐位
  prescription 指明真实机制(方法存在性门控:beginTransaction / aggregate /
  syncSchema;objectstack-ai#4001 教训);batchSchemaSync .default(false) → .optional()
  (两处读者本就按缺省=false 消费)
- ADR-0087 评估(objectstack-ai#4484/objectstack-ai#4764 先例):driver 是代码不是 stack 树元数据,
  supports 字面量在 driver 类里、DriverConfig 是插件 TS 配置,均非 sys_metadata
  形态(stack 树近邻 datasource.capabilities 已于 objectstack-ai#4583 单独退役)⇒ 不登记 D2
  conversion,登记 D3 semantic migration driver-capabilities-inert-bits-removed
- driver 字面量同步:memory {} / mongodb { batchSchemaSync: true } /
  sql { queryDateGranularity, autonumber, batchSchemaSync: false }
- 回归 pin(driver.test.ts):31 位逐位 parse 拒绝 + prescription 断言;
  compiler-API 断言 34 键形状且退役位类型坍缩为 undefined、活位可写(反空转
  守卫);S1(schema 复活 streaming)5 pin 红、S2(driver 字面量复活)TS2416
  红,均实跑验证后还原
- 生成物:authorable-surface 31 行 [RETIRED]、spec-changes / upgrade-guide /
  references docs 全量再生成;14 项 spec 门禁全绿,全仓 typecheck 122 任务绿
- changeset:spec + 三 driver 包 major,FROM→TO 映射与一行修复齐备

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

* chore(spec): merge main(含 C10 objectstack-ai#4767)后按规重整生成物 —— 三敏感文件取 main 版再重生成

json-schema.manifest.json / authorable-surface.json / dual-source-exports.baseline.json
一律先取 origin/main 版本(避免静默复活 C10 蓄意删除的 system/EnvironmentArtifact*
键),再以合并后源码全量重跑 gen:schema/check:generated:DriverCapabilities 31 行
[RETIRED] 由生成器重新写入,manifest 与 authorable-surface 中 C10 删键保持已删
(实测两文件 system/EnvironmentArtifact 零残留)。8/8 生成物门禁 + 8 项源码审计
全 PASS,spec 292 文件 7374 测试全绿。

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

---------

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…endencySchema —— 双源清账 C7,裸名唯一归 ./cloud (objectstack-ai#4741) (objectstack-ai#4789)

`PackageDependency` / `PackageDependencySchema` 曾由 `./cloud` 与 `./kernel` 各自
导出一个声明,键集完全不相交(0 个共享属性):cloud 侧 `{packageId, versionRange,
optional}` 是作者写进包清单的**声明形**,kernel 侧 `{name, versionConstraint,
type, resolvedVersion}` 是解析器在依赖图上走的**解析形**。两边都不是 `.strict()`,
把一侧文档粘到另一侧只会静默剥键而非报错(objectstack-ai#4411 陷阱 / ADR-0104 silent-strip)。

两个概念而非两种拼写 ⇒ ADR-0112 D9(a),按维护者裁决改名 kernel 侧;cloud 侧保名。

- `RENAMED_DEFS` 承接 kernel/PackageDependency → kernel/ResolvedPackageDependency
  (4 keys carry:name / versionConstraint / type / resolvedVersion 全数健在)
- 零 tombstone、零 ADR-0087 conversion(无 key 离开契约,已按 objectstack-ai#4767 retiredKey()
  先例逐条评估后排除);零形状变更、零词表变化、默认值原样并由 parse pin 钉住
- `PluginSecurityProtocol.PackageDependency` → `.ResolvedPackageDependency`
- 同前缀近邻 PackageDependencyConflict / PackageDependencyResolutionResult 未动
- dual-source 基线 3 → 1(本簇 2 行经门禁 stale 分支点名自证删除)
- 幽灵页 references/cloud/plugin-security.mdx 随 gen:docs 自愈(objectstack-ai#4696 语境),
  cloud 侧 PackageDependency 归位到 package-version.mdx
- compiler-API 符号身份 pin(exports map 全 16 入口枚举 + 防空转守卫 + holders
  精确相等);S1/S2 sabotage 实证见 PR

三仓 import 级实测:objectstack / cloud / objectui 对 kernel 侧零外部 importer。
major(TS2305)、零元数据迁移。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:system size/xl tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec 双源清账 C10:EnvironmentArtifact ×3(./cloud ≠ ./system)—— 路线 A′:system 收敛为活 wire 形,cloud re-export,3 条

2 participants